/* Copyright (c) 2004-2024 peigen.info. All rights reserved. */

package info.peigen.hotpot.business.account.facade;


import info.peigen.hotpot.business.account.facade.order.create.*;
import info.peigen.hotpot.business.account.facade.order.edit.EditAccountOrder;
import info.peigen.hotpot.business.account.facade.order.freeze.FreezeAccountOrder;
import info.peigen.hotpot.business.account.facade.order.freeze.UnfreezeAccountOrder;
import info.peigen.hotpot.business.account.facade.result.create.CreateAccountResult;
import info.peigen.hotpot.business.account.facade.result.edit.EditAccountResult;
import info.peigen.hotpot.business.account.facade.result.freeze.FreezeAccountResult;
import info.peigen.hotpot.business.account.facade.result.freeze.UnfreezeAccountResult;

/**
 * <b>(AccountServiceFacade)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2021/7/28
 */
public interface AccountServiceFacade {
    /**
     * 创建[客户账户]
     *
     * @param order CreateCustomerAccountOrder
     *
     * @return CreateAccountResult
     */
    CreateAccountResult createCustomerAccount(CreateCustomerAccountOrder order);

    /**
     * 创建[备付金账户]
     *
     * @param order CreateProvisionsAccountOrder
     *
     * @return CreateAccountResult
     */
    CreateAccountResult createProvisionsAccount(CreateProvisionsAccountOrder order);

    /**
     * 创建[收费账户]
     *
     * @param order CreateFeeAccountOrder
     *
     * @return CreateAccountResult
     */
    CreateAccountResult createFeeAccount(CreateFeeAccountOrder order);

    /**
     * 创建[中间账户]
     *
     * @param order CreateIntermediateAccountOrder
     *
     * @return CreateAccountResult
     */
    CreateAccountResult createIntermediateAccount(CreateIntermediateAccountOrder order);

    /**
     * 创建[合作伙伴]账户
     *
     * @param order CreatePartnerAccountOrder
     *
     * @return CreateAccountResult
     */
    CreateAccountResult createPartnerAccount(CreatePartnerAccountOrder order);

    /**
     * 修改[账户]别名
     *
     * @param order EditAccountOrder
     *
     * @return EditAccountResult
     */
    EditAccountResult editAccount(EditAccountOrder order);

    /**
     * 冻结账户
     *
     * @param order FreezeAccountOrder
     *
     * @return FreezeAccountResult
     */
    FreezeAccountResult freezeAccount(FreezeAccountOrder order);

    /**
     * 解冻账户
     *
     * @param order UnfreezeAccountOrder
     *
     * @return UnfreezeAccountResult
     */
    UnfreezeAccountResult unfreezeAccount(UnfreezeAccountOrder order);

}
